package main

import "fmt"
// 定义一个address结构体

type Address struct{
	Name string
	Phone int
}

func main() {
	var userinfo = make(map[string]interface{})
	userinfo["username"] = "张三"
	userinfo["age"] = 20
	// map里面放了一个切片类型
	userinfo["hobby"] = []string{"睡觉", "吃饭"}

	fmt.Println(userinfo["age"])
	fmt.Println(userinfo["hobby"])
	fmt.Println(userinfo["hobby"])

	var address =Address{
		Name: "李四",
		Phone: 123456789,
	}
	fmt.Println(address.Name)
	// map里面放了一个结构体
	userinfo["address"]=address
	// 把结构体实例赋值给map对象
	fmt.Println(userinfo["address"])
	// 获取空接口里面值对应的属性
	// var name =userinfo["address"].Name
	// fmt.Println(name)
	// 获取空接口里面值对应的属性可以通过类型断言
	hobby2,_:=userinfo["hobby"].([]string)
	fmt.Println(hobby2[1])
	// 获取空接口结构体里面的属性
	address2,_ :=userinfo["address"].(Address)
	fmt.Println(address2.Name,address2.Phone)
}